package finalize_;

public class Finalize_ {
    public static void main(String[] args) {

        Car baoma = new Car("宝马");
        //当某个对象没有任何引用时，则jvm就认为这个对象是一个垃圾对象，
        // 就会使用垃圾回收机制来销毁该对象，将堆里的这个空间释放了（别人可以用该空间）
        baoma = null;//把该对象置空,baoma就不会指向Car的一个具体的对象
        //这时car对象就是一个垃圾，垃圾回收器就会销毁对象，在销毁对象前，会调用
        //该对象的finalize方法，程序员就可以在finalize中，写自己的业务逻辑代码(比如释放资源：数据库的连接，打开的文件)
        System.gc();//主动调用垃圾回收器
        System.out.println("程序退出了...");
    }
}
//主要对象在回收的时候才会调用finalize
class Car{
    private String name;
    //属性：资源...
    public Car(String name) {
        this.name = name;
    }
   //重写finalize方法
    @Override
    protected void finalize() throws Throwable {
        //super.finalize();//默认调用父类的finalize
        //程序员自己实现一些方法
        System.out.println("我们销毁 汽车" + name);
        System.out.println("释放了某些资源...");
    }
}